package com.baosight.scaq.common.aq.basetools;

import java.math.BigDecimal;
import java.sql.Time;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;

import com.baosight.iplat4j.core.ei.EiBlock;
import com.baosight.iplat4j.core.ei.EiConstant;
import com.baosight.iplat4j.core.ei.EiInfo;

/**
 * 系统工具类
 * <p>Title: StaticTools.java</p>
 * <p>Description: </p>
 * <p>Copyright: Baosight Software LTD.co Copyright (c) 2002</p>
 * <p>Company: Baosight Software</p>
 * @author 严洪浩
 * @version 1.0
 * <pre>Histroy:
 *          2010-12-3 下午12:32:19  严洪浩  Create
 *</pre>
 */
public class StaticTools {
	
	/**
	 * bLockId为BLockID，默认为result; inColumn 初始字段名，outColumn转变字段值
	 * changeMap为实际值
	 * <p>Function: ChangeEiInfo</p>
	 * <p>Description: </p>
	 * <p>return value:EiInfo</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2010-12-3下午12:40:59 严洪浩
	 * </p>
	 *
	 */
	public static EiInfo ChangeEiInfo(EiInfo inInfo, String bLockId, String inColumn, String outColumn, Map<String, String> changeMap){
		if(inInfo != null) {
			if (bLockId == null || bLockId.equals("")) {
				bLockId = "result";
			}
			for (int i = 0; i < inInfo.getBlock(bLockId).getRowCount(); i++) {
				String fdStatus = inInfo.getBlock(bLockId).getCellStr(i, inColumn);//状态
				
				if(fdStatus == null) {
				}
				else {
					if(changeMap.containsKey(fdStatus.trim())) {
						inInfo.getBlock(bLockId).setCell(i, outColumn, changeMap.get(fdStatus.trim()));
					}
				}
			}
		}
		return inInfo;
	}
	
	/**
	 * bLockId为BLockID，默认为result; inColumn 初始字段名，outColumn转变字段值
	 * changeList为Map组成的数据集，Map中建的名称必须为value，值的名称必须为label
	 * <p>Function: ChangeEiInfo</p>
	 * <p>Description: </p>
	 * <p>return value:EiInfo</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2010-12-20上午10:10:45 张志芳
	 * </p>
	 *
	 */
	@SuppressWarnings("rawtypes")
	public static EiInfo ChangeEiInfo(EiInfo inInfo, String bLockId, String inColumn, String outColumn, List changeList){
		Map<String, String> changeMap = new HashMap<String, String>();
		for (Iterator it = changeList.iterator(); it.hasNext();) {
			Map map = (Map) it.next();
			changeMap.put(map.get("value").toString(),map.get("label").toString());
		}		
		return ChangeEiInfo(inInfo, bLockId, inColumn, outColumn, changeMap);
	}
	
	/**
	 * 在现有EiInfo中添加查询条件，fieldName 字段名称，fieldValue 字段值 ，isChange 如果字段存在，是否替换
	 * <p>Function: setQueryPars</p>
	 * <p>Description: </p>
	 * <p>return value:EiInfo</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-1-17下午12:54:49 严洪浩
	 * </p>
	 *
	 */
	public static EiInfo setQueryParameters(EiInfo inInfo, String fieldName, Object fieldValue, boolean isChange) {
		if(fieldName == null || fieldName.equals("")) {
			return inInfo;
		}
		
		if(fieldValue == null) {
			fieldValue = "";
		}
		
		EiBlock queryBlock = inInfo.getBlock(EiConstant.queryBlock);
		if(queryBlock == null) {
			inInfo.addBlock(EiConstant.queryBlock);
			inInfo.getBlock(EiConstant.queryBlock).setCell(0, fieldName, fieldValue);
		}
		else if(queryBlock.getRowCount() == 0) {
			inInfo.getBlock(EiConstant.queryBlock).setCell(0, fieldName, fieldValue);
		}
		else {
			if(queryBlock.getRow(0).containsKey(fieldName)) {
				if(isChange) {
					inInfo.getBlock(EiConstant.queryBlock).setCell(0, fieldName, fieldValue);
				}
			}
			else
			{
				inInfo.getBlock(EiConstant.queryBlock).setCell(0, fieldName, fieldValue);
			}
		}

		return inInfo;
	}
	
	/*
	 * 获得当前日期
	 */
	public static String getDate()
	{
		Date dt=new Date();
	    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置显示格式

	   	return df.format(dt);
	}
	
	/**
	 * 获得当前日期
	 * @return
	 */
	public static String getDateDefault()
	{
		Date dt=new Date();
	    DateFormat df = new SimpleDateFormat("yyyyMMdd");//设置显示格式

	   	return df.format(dt);
	}
	
	/*
	 * 获得当前日期和时间
	 */
	public static String getDateTime()
	{
		Date dt = new Date();
	    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置显示格式
	    df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
	   	return df.format(dt);
	}
	
	/*
	 * 获得当前日期和时间
	 */
	public static String getDateTime(String format)
	{
		Date dt = new Date();
	    DateFormat df = new SimpleDateFormat(format);//设置显示格式
	    df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
	   	return df.format(dt);
	}
	
	/*
	 * 获得文件上传Id
	 * 目前Id生成规则为：系统当前日期。格式为：年4位月2位日2位时2位分2位秒2位毫秒3位，例如：20160803230202001
	 * 如果需要修改docid生成规则，修改这里就可以。调用地方不用动
	 */
	public static String getDocId()
	{
		Date dt = new Date();
	    DateFormat df = new SimpleDateFormat("yyyyMMddhh24mmssSSS");//设置显示格式
	    df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
	   	return df.format(dt);
	}
	
	/*
	 * 获得指定日期的明天
	 * 若传入的值为""，则获得当前日期的明天
	 * 传入格式应为"yyyy-MM-dd"
	 */
	@SuppressWarnings({ "static-access", "rawtypes", "deprecation" })
	public static String getTomorrow(String inDate)
	{
		Date date;
		if(inDate.equals(""))
		{
			date = new Date();//取当前系统时间
		}
		else
		{
			ArrayList list = datelist(inDate);
			date = new Date((Integer.parseInt((String)list.get(0))-1900), 
					(Integer.parseInt((String)list.get(1))-1), 
					Integer.parseInt((String)list.get(2)));
		}
		
	    Calendar calendar = new GregorianCalendar();
	    calendar.setTime(date);
	    calendar.add(calendar.DATE, 1);//把日期往后增加一天.整数往后推,负数往前移动
	    date=calendar.getTime(); //这个时间就是日期往后推一天的结果        
	    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
	    String dateString = formatter.format(date);
	    
	    return dateString;
	}
	
	/*
	 * 获得当前日期的昨天
	 * 若传入的值为""，则获得当前日期的昨天
	 * 传入格式应为"yyyy-MM-dd"
	 */
	@SuppressWarnings({ "static-access", "rawtypes", "deprecation" })
	public static String getYesterday(String inDate)
	{
		Date date;
		if(inDate.equals(""))
		{
			date = new Date();//取当前系统时间
		}
		else
		{
			ArrayList list = datelist(inDate);
			date = new Date((Integer.parseInt((String)list.get(0))-1900), 
					(Integer.parseInt((String)list.get(1))-1), 
					Integer.parseInt((String)list.get(2)));
		}
		
	    Calendar calendar = new GregorianCalendar();
	    calendar.setTime(date);
	    calendar.add(calendar.DATE, -1);//把日期往后增加一天.整数往后推,负数往前移动
	    date=calendar.getTime(); //这个时间就是日期往后推一天的结果        
	    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
	    String dateString = formatter.format(date);
	    
	    return dateString;
	}
	
	/*
	 * 获得当前年份
	 */
	public static String getYear()
	{
		Date dt=new Date();
	    DateFormat df = new SimpleDateFormat("yyyy");//设置显示格式

	   	return df.format(dt);
	}
	
	/*
	 * 返回当前月份
	 * @return (String) 当前月份，两位
	 */
	public final static String getMonth() {
		Date dt=new Date();
	    DateFormat df = new SimpleDateFormat("MM");//设置显示格式

	   	return df.format(dt);
	}
	
	/*
	 * 获得当前日期
	 */
	public static String getDateforDay()
	{
		Date dt=new Date();
	    DateFormat df = new SimpleDateFormat("MMdd");//设置显示格式

	   	return df.format(dt);
	}
	
	/**
	 * 当前月
	 * <p>Function: getMonth</p>
	 * <p>Description: </p>
	 * <p>return value:String</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-6-28下午12:24:05 严洪浩
	 * </p>
	 *
	 */
	public static String getStringMonth()
	{
		Date dt = new Date();
	    DateFormat df = new SimpleDateFormat("yyyyMMdd");//设置显示格式
	    
	    String _temp = df.format(dt);
	   	return _temp.substring(4, 6);
	}
	
	/**
	 * 当前月
	 * <p>Function: getMonth</p>
	 * <p>Description: </p>
	 * <p>return value:String</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-6-28下午12:24:05 严洪浩
	 * </p>
	 *
	 */
	public static int getIntMonth()
	{
		Date dt = new Date();
	    DateFormat df = new SimpleDateFormat("yyyyMMdd");//设置显示格式
	    
	    String _temp = df.format(dt).substring(4, 6);
	   	return Integer.parseInt(_temp);
	}
	
	/*
	 * 得到某个日期所在月份的第一天.
	 * @param  (String)  date.
	 * @return (String)  lastday.
	 */
	public static final String getFirDay(String strFirDay) {
		strFirDay = tostanddate(strFirDay).substring(0, 8) + "01";
		return strFirDay;
	}

	/*
	 * 得到某个日期所在月份的最后一天.
	 * @param  (String)  date.
	 * @return (String)  lastday.
	 */
	public static final String getLastDay(String oldday) {
		oldday = tostanddate(oldday);
		if (!isDate(oldday)) {
			return "error";
		}
		int y = Integer.parseInt(oldday.substring(0, 4));
		int m = Integer.parseInt(oldday.substring(5, 7));
		int d = Integer.parseInt(oldday.substring(8, 10));

		switch (m) {
			case 2 :
				if (isLeap(y)) {
					d = 29;
				} else {
					d = 28;
				};
				break;
			case 4 :
			case 6 :
			case 9 :
			case 11 :
				d = 30;
				break;
			default :
				d = 31;
		}
		return oldday.substring(0, 8) + String.valueOf(d);
	}
	
	/*
	 * 将传入的日期字符串表达式格式化
	 * @param  : String 日期字符串
	 * @return : String
	 */
	public final static String tostanddate(String str) {
		str = str.trim();
		if (str.substring(6, 7).equals("-")) {
			str = str.substring(0, 5) + "0" + str.substring(5, str.length());
		}
		if (str.trim().length() < 10) {
			str = str.substring(0, 8) + "0" + str.substring(8, 9);
		}
		return str;
	}
	
	/*
	 * 是否为日期型字符串
	 * @param   需校验 的数据
	 * @return  boolean 校验后的结果
	 *          true--正确 false--错误
	 */
	public final static boolean isDate(String str) {
		try {
			if ((str == null) || (str.equals(""))) {
				return false;
			} else {
				str = str.trim();
			}
			java.sql.Date.valueOf(str);

			return true;
		} catch (Exception e) {
			return false;
		}
	}
	
	/*
	 * 判断是否为闰年
	 * @param  : int 年份
	 * @return : boolean-- true/false
	 */
	public static boolean isLeap(int y) {
		if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) {
			return true; //是闰年;
		} else {
			return false;
		}
	}
	

	/*
	 * 获取日期字符串中的年字串
	 * @param  String 日期字符串
	 * @return String
	 */
	@SuppressWarnings("rawtypes")
	public final static String getYearStr(String sdate) {
		ArrayList d;
		d = datelist(sdate);
		if (d == null || d.isEmpty()) {
			return "";
		}
		if (d.size() < 3) {
			return "";
		}
		return (String) d.get(0);
	}
	
	/*
	 * 获取日期字符串中的月字串
	 * @param  String 日期字符串
	 * @return String
	 */
	@SuppressWarnings("rawtypes")
	public final static String getMonthStr(String sdate) {
		ArrayList d = datelist(sdate);
		if (d == null || d.isEmpty()) {
			return "";
		}
		if (d.size() < 3) {
			return "";
		}
		return (String) d.get(1);
	}
	
	/*
	 * 获取日期字符串中的年、月、日字串
	 * @param  String 日期字符串
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private final static ArrayList datelist(String sdate) {
		if (sdate.trim().length() < 8 || sdate.trim().length() > 10) {
			return null;
		}
		String sd = tostanddate(sdate);
		if (!isDate(sd)) {
			return null;
		}
		ArrayList al = new ArrayList();
		al.add(sd.substring(0, 4));
		al.add(sd.substring(5, 7));
		al.add(sd.substring(8, 10));
		return al;
	}
	
	/*
	 * 得到某一年份的第一天.
	 * @return (String)  firstday.
	 */
	public static final String getYearFirDay(String year) {
		return year + "-" + "01-01";
	}
	
	/*
	 * 得到某一年份的最后一天.
	 * @return (String)  lastday.
	 */
	public static final String getYearLastDay(String year) {
		return getLastDay(year + "-" + "12-01");
	}
	
	/*
	 * 日期大小比较
	 * 
	 * 如果 enddate 晚于 begindate 则返回 真
	 * 
	 */
	public static boolean compareDate(String begindate, String enddate) {
		boolean result = true;
		try {
			Date d1 = stringToDate(begindate, "yyyy-MM-dd");
			Date d2 = stringToDate(enddate, "yyyy-MM-dd");

			if (d2.after(d1)) {

				return true;

			} else if (d1.after(d2)) {

				return false;

			}
			
		} catch (Exception e) {
			System.out.println("" + e);

		}
		return result;
	}
	
	/*
	 * 将字符串转为日期
	 * @param:   String
	 * @return : Date
	 */
	public static final Date stringToDate(String str, String strFormat) {
		SimpleDateFormat sdFormat = new SimpleDateFormat(strFormat);
		Date date = new Date();
		try {
			date = sdFormat.parse(str);
		} catch (Exception e) {
			Date date1 = null;
			return date1;
		}
		return date;
	}
	
	/*
	 * 得到当前时间 字符串
	 * @return String
	 */
	public static final String getTime() {

		java.util.Date date = new java.util.Date();
		java.sql.Time time;
		time = new Time(date.getTime());
		String strTime = time.toString();

		return strTime;
	}
	
	/*
	 * 转换获得最新的编号
	 * str 传入字符串, start 变量起始位置, end变量结束为止
	 * @return String
	 */
	public static final String convertStr(String str,int start,int end)
	{
		String str1 = str.substring(0,start);//取得编号的前start位
		String str2 = str.substring(start,end);//取得编号的后3位
		int nub = Integer.parseInt(str2); 
		str2 = Integer.toString(nub+1);//自增操作
		if(str2.length() == 1){
			return str1+"00"+str2;//如果是一位数据的话前两位补0
		}else if (str2.length() == 2)
		{
			return str1+"0"+str2;//如果是两位数据的话前一位补0
		}else
		{
			return str1+str2;
		}
	}
	
	/**
	 * 得到离传入日期的 第mons月后的新日期
	 * 
	 * @param int mons  取某一天前几个月 mons = 负数, 某一天后几个月 mons = 正数 月
	 * @param string strDate 传入的日期字符串
	 * @param string 固定为空串:"" 为标准格式
	 */
	public final static String getMonthDate(int mons, String strDate, String format) {
		if(format==null||format.equals(""))
		{
			format = "yyyy-MM-dd";
		}
		if (strDate == null || strDate.equals("")) {
			strDate = getDate();
		}

		SimpleDateFormat formatter = new SimpleDateFormat(format);
		Date date = null;
		try {
			date = formatter.parse(strDate);
		} catch (ParseException e) {
			date = new Date();
		}

		if (mons == 0) {
			return formatter.format(date);
		} else {
			Calendar nowdate = Calendar.getInstance();
			nowdate.setTime(date);
			nowdate.add(Calendar.MONTH, mons);

			return formatter.format(nowdate.getTime());
		}
	}
	
	/**
	 * 得到离传入日期的 第 DAYS 天的新日期
	 * 
	 * @param int days  取某一天前 days = 负数, 某一天后 days = 正数 天
	 * @param string strDate 传入的日期字符串
	 * @param string 固定为空串:"" 为标准格式
	 */
	public final static String getDate(int days, String strDate, String format) {
		if(format==null||format.equals(""))
		{
			format = "yyyy-MM-dd";
		}
		if (strDate == null || strDate.equals("")) {
			strDate = getDate();
		}

		SimpleDateFormat formatter = new SimpleDateFormat(format);
		Date date = null;
		try {
			date = formatter.parse(strDate);
		} catch (ParseException e) {
			date = new Date();
		}

		if (days == 0) {
			return formatter.format(date);
		} else {
			Calendar nowdate = Calendar.getInstance();
			nowdate.setTime(date);
			nowdate.add(Calendar.DAY_OF_YEAR, days);

			return formatter.format(nowdate.getTime());
		}
	}
	
	/**
	 * 得到离传入分钟的 第 mins 分钟的新时间
	 * 
	 * @param int days  可以有 负数
	 * @param string strDate 传入的时间字符串
	 * @param string 固定为空串:"" 为标准格式
	 */
	public final static String getDateTime(int mins, String strDateTime, String format) {
		if(format==null||format.equals(""))
		{
			format = "yyyy-MM-dd HH:mm:ss";
		}
		if (strDateTime == null || strDateTime.equals("")) {
			strDateTime = getDateTime();
		}

		SimpleDateFormat formatter = new SimpleDateFormat(format);
		Date date = null;
		try {
			date = formatter.parse(strDateTime);
		} catch (ParseException e) {
			date = new Date();
		}

		if (mins == 0) {
			return formatter.format(date);
		} else {
			Calendar nowdate = Calendar.getInstance();
			nowdate.setTime(date);
			nowdate.add(Calendar.MINUTE, mins);

			return formatter.format(nowdate.getTime());
		}
	}
	
	/**
	 * 
	 * <p>Function: convertStr</p>
	 * <p>Description: </p>
	 * <p>return value:String</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-6-12上午02:52:54 严洪浩
	 * </p>
	 *
	 */
	public static final String convertString(String args, int start, int end, int length) {
		StringBuffer _result = new StringBuffer();
		try {
			String _tmp = args.substring(start, end);
			int _int = Integer.parseInt(_tmp);
			String newTmp = Integer.toString(_int+1);
			if(newTmp.length() > length) {
				return newTmp;
			}
			for(int i = 0; i < length - newTmp.length(); i++) {
				_result.append("0");
			}
			_result.append(newTmp);
		} catch (Exception e) {
			for(int i = 0; i < length - 1; i++) {
				_result.append("0");
			}
			_result.append("1");
		}
		return _result.toString();
	}
	
	/*
	 * MAP中通过名字来找id
	 * @return String
	 */
	@SuppressWarnings("rawtypes")
	public static String FindIdByName(String name, Map map)
	 {
		Iterator it = map.entrySet().iterator();
		 while (it.hasNext()) {
			 Map.Entry val = (Map.Entry)it.next();
			 if(val.getValue().toString().equals(name))
			 {
				 return val.getKey().toString();
			 }
		 }
	     return null;
	 }
	
	/**
	 *  得到两个日期之间的相差天数
	 *  @param  : Date 开始日期
	 *  @param  : Date 结束日期
	 *  @return : int 相差天数
	 */
	public static final int interval(Date first, Date last) {
		if(first==null || last==null)
			return 0;
		int inter = 0;
		inter = (int) ((last.getTime() - first.getTime()) / (long) 0x5265c00);
		return inter;
	}
	
	/**
	 * 判断是否为整数数字
	 * <p>Function: checkNumber</p>
	 * <p>Description: </p>
	 * <p>return value:boolean</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-5-30下午12:16:21 严洪浩
	 * </p>
	 *
	 */
	public static final boolean checkInteger(String str) {
		if(str == null || str.equals("")) {
			return false;
		}
		
		try {
			Integer.parseInt(str);
		} catch (Exception e) {
			return false;
		}
		
		return true;
	}
	
	/**
	 * Info中的block对象； index:block中数据区的行数（从0开始计）
	 * <p>Function: initCombox</p>
	 * <p>Description: block:</p>
	 * <p>return value:String</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-2-15下午05:56:42 张小飞
	 * </p>
	 *
	 */
	@SuppressWarnings("unchecked")
	public static String initCombox(EiBlock block, int index){
		String column = "NULL";
		
		try {
			Map<String, String> map = block.getRow(index);
			
			for(String value : map.keySet()){
				if("value".equals(value)){
					column = map.get(value);
					break;
				}
			}
		} catch (Exception e) {

		}

		return column;
	}
	
	/*
	 * 得到某个年月的月天数.
	 * @param  (int)  year.
	 * @param  (int)  month.
	 * @return (int)  dayNum.
	 */
	public static final int getMonthDayNum(int year, int month) 
	{
		int dayNum = 31;
		switch (month) {
			case 2 :
				if (isLeap(year)) {
					dayNum = 29;
				} else {
					dayNum = 28;
				};
				break;
			case 4 :
			case 6 :
			case 9 :
			case 11 :
				dayNum = 30;
				break;
			default :
				dayNum = 31;
		}
		return dayNum;
	}
	
	/**
	 * 自动去掉数字后面多余的0
	 * <p>Function: toDouble</p>
	 * <p>Description: </p>
	 * <p>return value:Double</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-9-27上午05:52:35 严洪浩
	 * </p>
	 *
	 */
	public static final String toDropZero(String str) {
		String temp = new String("0");
		NumberFormat nf = NumberFormat.getInstance();
		try {
			temp = nf.format(Double.parseDouble(str));
		} catch (Exception e) {
			e.printStackTrace();
		}

		return temp;
	}
	
	/**
	 * 四舍五入 保留多少位小数
	 * <p>Function: toDouble</p>
	 * <p>Description: </p>
	 * <p>return value:Double</p>
	 * <p>throws Exception:</p>
	 * <p>History:
	 *    2011-9-27上午06:08:03 严洪浩
	 * </p>
	 *
	 */
	public static final Double toDouble(String str, int pot) {
		Double temp = new Double(0);
		try {
			temp = Double.valueOf(str);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}
		BigDecimal result = new BigDecimal(temp);
		Double _value = result.setScale(pot, BigDecimal.ROUND_HALF_UP).doubleValue();

		return _value;
	}
	
	/**
	 * 返回公式计算结果
	 * @param string vgs   公式
	 * @param param HashMap mapset 公式中对应字段的值
	 * @param v 是否需要四舍五入的数字 1 表示需要四舍五入
	 * @param scale 小数点后保留几位
	 * @return  string 返回校验的结果 ok 标识公式正确 否则返回错误信息
	 */
	@SuppressWarnings("rawtypes")
	public static String getCalculateValue(String vgs, HashMap mapset, String v, int scale) {
		BigDecimal val ;
		String gs = getVFomula(vgs, mapset);
		PrivFormula a = new PrivFormula(gs);
		val = a.getResult();
		String jg = "" + val.toString();

		if (v.equals("1")) {
			jg = round(jg, scale);
		} 
		return jg;
	}
	
	/**
	 * 返回带有数值的数学表达式
	 * @param string vgs   公式
	 * @param HashMap mapset 公式中对应字段的值
	 * @return  string 返回带有值的公式
	 */
	@SuppressWarnings({ "rawtypes", "unused" })
	public static String getVFomula(String vgs, HashMap mapset) {
		String tmp = "",
			field = "",
			tmpstr = "",
			setvalue = "",
			s1 = "",
			s2 = "";
		String vstr = vgs;
		int p = 0, q = 0, x = 0, l = 0;

		l = vstr.length();

		String f1 = vstr.substring(0, 1);
		if (f1.equals("[")) {
			p = vstr.indexOf("[");
			q = vstr.indexOf("]");
			field = vstr.substring(1, q);

			setvalue = mapset.get("[" + field + "]") + "";
			if (setvalue.equals(""))
				setvalue = "0";
			if (q < (l - 1))
				vstr = setvalue + vstr.substring(q + 1);
			else
				vstr = setvalue;

		}
		
		while (vstr.indexOf("[") > 0) {
			l = vstr.length();
			p = vstr.indexOf("[");
			q = vstr.indexOf("]");
			s1 = vstr.substring(0, p);

			if (q < (l - 1))
				s2 = vstr.substring(q + 1);
			else
				s2 = "";
			field = vstr.substring(p + 1, q);

			setvalue = mapset.get("[" + field + "]") + "";
			if (setvalue.equals(""))
				setvalue = "0";
			
			vstr = s1 + setvalue + s2;
		}
		return vstr;
	}
	
	/**
	 * 提供精确的小数位  四舍五入  处理。
	 * @param v 需要四舍五入的数字
	 * @param scale 小数点后保留几位
	 * @return String 四舍五入后的结果
	 */
	public final static String round(String v, int scale) {
		if (scale < 0) {
			return v;
		}
		BigDecimal b = new BigDecimal(v);
		BigDecimal one = new BigDecimal("1");
		return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).toString();
	}
	
	/**
	 * 返回月份(汉字)
	 * @param  (String) 1/2/3/4
	 * @return (String) 当前月份 一月/二月....
	 */
	public final static String getCMonth(String sMonth) {
		if(sMonth==null||sMonth.equals("")){
			return "";
		}
		int m=Integer.parseInt(sMonth);
		if (m==1)
			return "一月";
		else if (m==2)
			return "二月";
		else if (m==3)
			return "三月";
		else if (m==4)
			return "四月";
		else if (m==5)
			return "五月";
		else if (m==6)
			return "六月";
		else if (m==7)
			return "七月";
		else if (m==8)
			return "八月";
		else if (m==9)
			return "九月";
		else if (m==10)
			return "十月";
		else if (m==11)
			return "十一月";
		else if(m==12)
			return "十二月";
		else return "月份错误";
	}
}
